Muita gente tem dúvida em como reduzir uma imagem mantendo a proporção entre largura e altura. A solução é simples. Lógica pura. Matemática, na verdade. :P
Vamos a um exemplo simples e explicado.
Definimos o caminho à imagem a ser reduzida:
1 2 | // imagem a ser reduzida $foto = 'foto2.jpg'; |
Definimos as dimensões máximas da imagem
1 2 | // dimensões máximas da imagem, em pixels (largura e altura) $tamMax = array( 200, 240 ); |
Usando a função getimagesize(), do PHP, obtemos a largura, a altura e o tipo da imagem:
1 2 3 4 | // 0 => largura // 1 => Altura // 2 => Formato da imagem list( $imgLarg, $imgAlt, $imgTipo ) = getimagesize( $foto ); |
Esta parte faz o cálculo das novas dimensões da imagem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // verifica se a imagem é maior que o máximo permitido if ( $imgLarg > $tamMax[0] || $imgAlt > $tamMax[1] ) { // verifica se a largura é maior que a altura if ( $imgLarg > $imgAlt ) { $novaLargura = $tamMax[0]; $novaAltura = round( ($novaLargura / $imgLarg) * $imgAlt ); } // se a altura for maior que a largura elseif ( $imgAlt > $imgLarg ) { $novaAltura = $tamMax[1]; $novaLargura = round( ($novaAltura / $imgAlt) * $imgLarg ); } // altura == largura else { $novaAltura = $novaLargura = max( $tamMax ); } } else { echo "não é necessário redimensionar"; exit(); } |
Por fim, criamos as imagens, fazemos o redimensionamento e exibimos a imagem desejada no navegador:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // cria a imagem baseada na imagem original $srcImg = imagecreatefromjpeg( $foto ); // cria a nova imagem $destImg = imagecreatetruecolor( $novaLargura, $novaAltura ); // copia para a imagem de destino a imagem original redimensionada imagecopyresampled( $destImg, $srcImg, 0, 0, 0, 0, $novaLargura, $novaAltura, $imgLarg, $imgAlt ); // cabeçalho para exibir a imagem no navegador. // se for salvar em arquivo, não é necessário header('content-type: image/jpeg' ); // exibe a imagem imagejpeg( $destImg ); // destrói as imagens geradas imagedestroy( $destImg ); imagedestroy( $srcImg ); |
Usei funções específicas para jpeg pois, nesse caso, usei uma imagem definida no script. Para criar um script genérico, você pode usar o terceiro elemento do array retornado por getimagesize(), a fim de chamar uma função conforme o tipo da imagem. Isso pode ser feito com o auxílio da função call_user_func.
Post simples. Apenas para sanar uma dúvdia recorrente por aí.
Solução simples. :)
Links úteis:
Referência das funções da biblioteca GD
Documentação da função call_user_func
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015